package cn.design;

import cn.design.realize.cglibdemo.CglibProxy;
import cn.design.realize.cglibdemo.OtherRealSubject;

/**
 * @author dlq
 * @description cglib代理对象的客户Client类
 * @date 2020/9/23 14:24
 * @since 1.0
 */
public class CglibProxyClientDemo {
    public static void main(String[] args) {
        //故事背景
        //女朋友过生，你要买一只阿玛尼的正品（不可能买赝品吧）给你女朋友
        // 不知道哪里可以买,但是你知道有代沟
        //所以你找代购买了一只阿玛尼的正品口红

        //定义你要做的事情(目标对象): 买阿玛尼口红
        OtherRealSubject targetObject = new OtherRealSubject();
        System.out.println("输出目标对象: "+targetObject.getClass());
        ///生成一个代理对象
        OtherRealSubject proxy = (OtherRealSubject) new CglibProxy(targetObject).getProxyInstance();
        System.out.println("输出代理对象: "+proxy.getClass());
        System.out.println("开始执行代理方法......");
        //然后执行代理的方法
        String result = proxy.bugLipstick("阿玛尼");
        System.out.println(result);


 /*
输出结果:
=================================
输出目标对象: class com.example.demo2.proxydemo.OtherRealSubject
输出代理对象: class com.example.demo2.proxydemo.OtherRealSubject$$EnhancerByCGLIB$$21115223
开始执行代理方法......
cglib代理----开始执行targetObject方法......
cglib代理----结束执行targetObject方法.....
买到了一只阿玛尼口红
=================================
结论: 和动态代理一样,是在正在执行代理对象调用的时候才去调用
*/

    }

}
